{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Powerpoint loader and parser\n",
    "\n",
    "https://python.langchain.com/v0.1/docs/integrations/document_loaders/microsoft_powerpoint/"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 方法1：使用Unstructured"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from langchain_community.document_loaders import UnstructuredPowerPointLoader"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "powerpoint_file = '../datasets/envision/PLM21x_基础课程-01-基础培训.pptx'\n",
    "\n",
    "loader = UnstructuredPowerPointLoader(powerpoint_file)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Original filename: PLM21x_基础课程-02-物料管理.pptx\n",
      "New filename: PLM21x_CH4_02_CH4\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "import re\n",
    "\n",
    "def generate_new_filename(filename):\n",
    "    # 获取文件名(不包括扩展名)\n",
    "    name, ext = os.path.splitext(filename)\n",
    "    \n",
    "    # 使用正则表达式将中文替换为英文\n",
    "    name = re.sub(r'[\\u4e00-\\u9fff]+', lambda x: 'CH' + str(len(x.group())), name)\n",
    "    \n",
    "    # 将非字母和数字的字符替换为下划线\n",
    "    name = re.sub(r'[^a-zA-Z0-9]+', '_', name)\n",
    "    \n",
    "    # 返回新的文件名(包括扩展名)\n",
    "    return name\n",
    "\n",
    "# 原始文件路径\n",
    "powerpoint_file = '../datasets/envision/PLM21x_基础课程-02-物料管理.pptx'\n",
    "\n",
    "# 获取原始文件名\n",
    "original_filename = os.path.basename(powerpoint_file)\n",
    "\n",
    "# 生成新的文件名\n",
    "new_filename = generate_new_filename(original_filename)\n",
    "\n",
    "print(f\"Original filename: {original_filename}\")\n",
    "print(f\"New filename: {new_filename}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = loader.load()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# data[0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 方法2：解析PowerPoint"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> GPT直接生成,一行不改直接可以使用！"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [],
   "source": [
    "import json\n",
    "from pptx import Presentation\n",
    "from pptx.enum.shapes import MSO_SHAPE_TYPE\n",
    "from pptx.chart.data import ChartData\n",
    "\n",
    "def extract_ppt_info(ppt_path):\n",
    "    prs = Presentation(ppt_path)\n",
    "    ppt_info = []\n",
    "    pptx_info = []\n",
    "\n",
    "    for slide_index, slide in enumerate(prs.slides, start=1):\n",
    "        slide_info = {\n",
    "            \"page_number\": slide_index,\n",
    "            \"title\": \"\",\n",
    "            \"text\": \"\",\n",
    "            \"images\": [],\n",
    "            \"tables\": [],\n",
    "            \"charts\": [],\n",
    "            \"shapes\": []\n",
    "        }\n",
    "\n",
    "\n",
    "        test_info = {\n",
    "            \"Title\": str(slide_index) + \":\",\n",
    "            \"Content\": \"\",\n",
    "        }\n",
    "\n",
    "        for shape in slide.shapes:\n",
    "            if shape.has_text_frame:\n",
    "                if shape.is_placeholder and shape.placeholder_format.type == 0:  # 标题\n",
    "                    # slide_info[\"title\"] = shape.text\n",
    "                    test_info[\"Title\"] +=  shape.text + \"\\n\"\n",
    "                else:  # 正文内容\n",
    "                    slide_info[\"text\"] += shape.text + \"\\n\"\n",
    "                    test_info[\"Content\"] += shape.text + \"\\n\"\n",
    "\n",
    "            elif shape.shape_type == MSO_SHAPE_TYPE.PICTURE:  # 图片\n",
    "                if not shape.name.startswith(\"Background\") and not shape.width < 100:  # 排除背景图片和小图标\n",
    "                    slide_info[\"images\"].append(shape.name)\n",
    "            elif shape.has_table:  # 表格\n",
    "                table_data = []\n",
    "                for row in shape.table.rows:\n",
    "                    row_data = []\n",
    "                    for cell in row.cells:\n",
    "                        row_data.append(cell.text)\n",
    "                    table_data.append(row_data)\n",
    "                slide_info[\"tables\"].append(table_data)\n",
    "            elif shape.has_chart:  # 图表\n",
    "                chart_data = []\n",
    "                chart = shape.chart\n",
    "                chart_data_object = chart.part.chart_workbook.worksheets[0]\n",
    "                for row in chart_data_object.iter_rows():\n",
    "                    row_data = []\n",
    "                    for cell in row:\n",
    "                        row_data.append(cell.v)\n",
    "                    chart_data.append(row_data)\n",
    "                slide_info[\"charts\"].append(chart_data)\n",
    "            else:  # 其他形状\n",
    "                shape_info = {\n",
    "                    \"type\": str(shape.shape_type),\n",
    "                    \"width\": shape.width,\n",
    "                    \"height\": shape.height,\n",
    "                    \"left\": shape.left,\n",
    "                    \"top\": shape.top\n",
    "                }\n",
    "                slide_info[\"shapes\"].append(shape_info)\n",
    "\n",
    "        ppt_info.append(slide_info)\n",
    "        pptx_info.append(test_info)\n",
    "\n",
    "    # return json.dumps(ppt_info, pptx_info, ensure_ascii=False, indent=2)\n",
    "    # return json.dumps(pptx_info, ensure_ascii=False, indent=2)\n",
    "    return pptx_info\n",
    "\n",
    "# # 使用示例\n",
    "# ppt_path = \"path/to/your/ppt/file.pptx\"\n",
    "# ppt_json = extract_ppt_info(ppt_path)\n",
    "# print(ppt_json)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[{'Title': '1:', 'Content': '21xPLM 基础课程\\n02 物料管理\\n'}, {'Title': '2:', 'Content': 'SC2\\n物料管理\\n'}, {'Title': '3:', 'Content': 'SC2.1 物料创建与发布\\n角色：机械DRE、电气DRE、工具工程师、集成计划\\n\\n业务规则：\\n原辅料/工具物料/计划物料创建与发布\\n风机业务的物料申请、发布、变更在新PLM21x中承载，在新PLM21x中生成Master物料数据；再自动将Instance影子物料同步至老PLM12x中；老PLM12x不能再触发物料创建；\\n自研大部件、储能等业务的物料申请、发布、变更在各自的业务PLM中承载，在新PLM21x中生成Master物料数据，自动同步Instance影子物料至对应的业务PLM中；\\n风机业务的物料统一在新PLM21x中通过DRO/ERO单据进行发布；同时，将状态同步至老PLM12x中Instance影子物料上；\\n自研大部件及储能等业务的物料在各自的业务PLM中基于影子物料通过DRO/ERO单据进行发布；同时，将状态同步至21x中Master物料数据上\\n2.物料应用于产品结构GoldenBOM\\n非TBB/CBB机型在老PLM12x中管理，直接使用12x中的Instance影子物料进行产品结构GoldenBOM的构建维护；\\nTBB/CBB机型在新PLM21x中管理，直接使用21x中的Master物料数据进行产品结构GoldenBOM的构建维护；\\n自研产品在自研PLM19x中管理，直接使用19x中的Instance影子物料进行产品结构GoldenBOM的构建维护；\\n\\n\\n\\n\\n'}, {'Title': '4:', 'Content': 'SC2.1 物料创建与维护\\n角色：机械DRE、电气DRE、工具工程师、集成计划\\n\\n要点：\\n点击【我的视图】菜单，【创建零件】下拉触发原辅料创建页面；\\n选中零件系列，确认是否把类属信息(物料追溯方式、质量管控等级、供应商相关性等)继承下来；\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n'}, {'Title': '5:', 'Content': 'SC2.1 物料创建与维护\\n角色：机械DRE、电气DRE、工具工程师、集成计划\\n\\n确认红色标注必填属性是否满足需求，并且若不填写，是否有报错提示；\\n物料中英文描述是否按需拼接，若描述超过40字符时，有对应提示；\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n'}, {'Title': '6:', 'Content': 'SC2.1.1 物料创建数据同步\\n要点：\\n完成创建，同步影子物料至PLM12x系统；\\n物料主数据创建后，同步至PDM系统；\\n物料（主数据/影子）删除前，需同步删除各PLM系统中的主数据/影子物料;\\n物料（主数据/影子）删除前，需同步删除PDM系统中的主数据/影子物料;\\n物料创建即入湖；\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nPLM12X\\nPDM\\nPLM21x\\n\\nPLM21x\\nPLM12X\\nPDM\\n自研PLM\\n\\n\\n\\n创建物料\\n删除物料\\n'}, {'Title': '7:', 'Content': 'SC2.1.1 物料变更数据同步\\n角色：DRE\\n\\n要点：\\nPLM21x物料状态、属性变更同步到PDM\\\\PLM12X；\\n自研PLM物料状态、属性变更同步到PLM21X（PLM12X）；\\n手工同步物料到自研PLM/PDM/PLM12x…；\\nPLM21x物料状态变更同步到PDM\\\\PLM12x\\\\自研PLM；\\n\\n\\n\\n\\n\\n\\n\\n'}, {'Title': '8:', 'Content': 'SC2.1.2 创建原辅料/工具物料\\n\\n\\n角色：机械DRE、电气DRE、工具工程师\\n\\n要点：\\n工具物料与原辅料相比，创建页面多【设备属性】属性；\\n\\n工具物料创建界面\\n原辅料创建界面\\n'}, {'Title': '9:', 'Content': 'SC2.1.3创建状态物料变更所有者\\n\\n\\n角色：机械DRE、电气DRE、工具工程师\\n\\n要点：\\n创建状态的物料可用过物料信息界面变更所有者按钮自行变更物料所有者；\\n\\n'}, {'Title': '10:', 'Content': 'SC2.1.4 基于物料创建/关联技术规范\\n\\n\\n\\n要点：\\n在物料的【零件规范和文档页面】添加系统以及创建好的技术规范；\\n\\n'}, {'Title': '11:', 'Content': 'SC2.1.5 基于物料创建/关联制造商供货件\\n\\n\\n要点：\\n制造商供货件是否需要创建，根据物料的供应商相关性判断：\\n强相关：发起物料审批流程时，一定要有制造商供货件；\\n弱相关：发起物料审批流程时，至少要有一个制造商供货件；\\n不相关：制造商供货件一栏内容为空，不能创建供货件；\\n2.制造商供货件号无要求，按需进行填写：厂商料号、物料描述;\\n3.可删除创建状态的制造商供货件；\\n\\n\\n\\n\\n'}, {'Title': '12:', 'Content': 'SC2.1.6 基于物料关联参考文档\\n\\n\\n要点：\\n仅能关联预发布/发布状态参考文档\\n\\n\\n'}, {'Title': '13:', 'Content': 'SC2.1.7基于物料创建/关联备件清单\\n\\n\\n要点：\\n在物料的【备件清单】页面新建备件清单，系统自动创建一个“SPL-物料号” 的备件清单；\\n可删除预备状态的备件清单；\\n\\n\\n\\n'}, {'Title': '14:', 'Content': 'SC2.1.8维护备件清单\\n\\n\\n要点：\\n1、创建的备件清单SPL通过手工搜索添加/移除物料或者excel导入方式来维护BOM物料，点击导入备件清单，下载模型线下维护模板内容（红色必填），然后导入系统；\\n2、只能添加预发布或发布状态的物料\\n\\n\\n\\n'}, {'Title': '15:', 'Content': 'SC2.1.9 创建自制件\\n角色：电气DRE\\n\\n要点：\\n1.维护自制件BOM清单，可手工添加也可以通过excel导入BOM清单方式（红色标注必填）；\\n2.可基于物料关联规格文档、参考文档及备件清单（同原辅料）；\\n\\n\\n'}, {'Title': '16:', 'Content': 'SC2.2 物料预发布\\n角色：机械DRE、电气DRE、工具工程师\\n\\n要点：\\n点击【创建DRO单据】按钮，触发DRO创建页面，填写相关信息；\\n搜索添加物料为更改请求项，界面上显示物料关联的技术规格、3D模型/2D图纸；\\n将物料关联的预备状态的技术规格一并添加至DRO单据；\\n\\n\\n\\n\\n'}, {'Title': '17:', 'Content': 'SC2.2 物料预发布\\n\\n要点：\\n点击【指派/提交】按钮，系统自动获取相关人员，可进行更换；\\n\\n\\n\\n\\n'}, {'Title': '18:', 'Content': 'SC2.2.1 物料预发布审核\\n角色：机械DRE、电气DRE、工具工程师\\n\\n要点：\\n1. 启动DRO流程，系统进行校验：\\n 更改请求项是否被添加到其他执行中的单据；\\n 物料是否有关联TS、3D其中之一；\\n 符合相关性要求的物料是否关联制造商供货件；\\n 是否子项状态大于等于父项；\\n\\n\\n\\n'}, {'Title': '19:', 'Content': 'SC2.2.1 物料预发布审核\\n\\n要点：\\n通过“指派提交”按钮为流程指派审核人员，通过“提升”按钮启动流程；\\n由任务owner去审批任务；\\n进入任务对象，可将流程任务转派给其他人审核；\\n\\n\\n\\n\\n\\n'}, {'Title': '20:', 'Content': 'SC2.2.1.1 物料预发布审核终止\\n\\n\\n要点：\\n所有者发现发起DRO审核数据有误，撤回流程；\\n修改完数据继续发起审核流程；\\n\\n\\n\\n\\n\\n1\\n2\\n3\\n4\\n5\\n'}, {'Title': '21:', 'Content': 'SC2.2.1.2 物料预发布审核驳回重新指派流程\\n\\n要点：\\n发起审核过的流程，如需更换流程，则需要重新指派流程模板，通过生命周期页面按钮更换；\\n换好流程模板之后，重新指派人员，通过此操作换人员审批；\\n\\n\\n\\n\\n\\n1\\n2\\n3\\n4\\n'}, {'Title': '22:', 'Content': 'SC2.2.2 物料预发布数据同步\\n角色：DRE\\n\\n要点：\\n1. 物料预发布后，状态及相关属性同步至PDM\\n2. 物料切入预发布状态触发物料发送至IMDM系统，并返回状态至PLM系统，当物料在IMDM走完流程至SAP时，返回状态至PLM系统；\\n\\n\\n\\n\\n'}, {'Title': '23:', 'Content': 'SC2.2.3 物料预发布/发布后关联制造商供货件\\n角色：DRE\\n\\n要点：\\n物料预发布/发布后DRE有创建制造商供货件的权限；\\n创建时仍然校验物料的制造商相关性，仅为弱相关时才可以继续添加制造商供货件；\\n\\n\\n\\n\\n'}, {'Title': '24:', 'Content': 'SC2.2.4 物料预发布数据同步\\n要点：\\n1.物料上增加【发送物料至IMDM】按钮，当物料没有正常触发至IMDM时，供管理员干预；\\n2. 物料上增加【发送物料至自研PLM】按钮，供自研PLM借用风机现有物料；\\n3. 物料预发布后，状态更新入湖；\\n'}, {'Title': '25:', 'Content': 'SC2.3 创建计划物料\\n角色：区域计划\\n\\n要点：\\n1.计划物料创建页面填写且显示的的分类属性为分类库中标记分类属性为计划物料的分类属性；\\n2.可基于物料关联参考文档及备件清单；\\n\\n\\n\\n\\n'}, {'Title': '26:', 'Content': 'SC2.3.1 计划物料发布\\n角色：区域计划\\n\\n要点：\\n1.创建EO单据，更改类别选择“计划物料发布”，添加现有项把计划物料添加至EO单据；\\n2.启动审核流程，确认是“计划物料发布流程模板” 将计划物料推至“发布”状态；\\n\\n\\n\\n\\n\\n'}, {'Title': '27:', 'Content': 'SC2.3.2 备件清单发布/变更\\n角色：机械DRE、电气DRE、工具工程师\\n\\n要点：\\n1.创建EO单据，发布备件更改类别选择“Golden备件发布”，变更备件更改类别选择“Golden备件变更”，添加现有项把备件清单添加至EO单据；\\n2.启动审核流程，确认是“SPL Release Route” 将备件清单推至“发布”状态；\\n\\n\\n\\n'}, {'Title': '28:', 'Content': 'SC2.3.3 标准件库变更\\n角色：机械DRE、电气DRE\\n要点：\\n1.创建EO单据，更改类别选择“标准件库”，填写其他信息后点击完成；\\n2.点击单据【规划完成发送PDM】按钮，将单据发送PDM，并执行标准件库变更，单据在PDM发布之后，将审签信息及其状态同步至PLM；\\n\\n\\n\\n'}, {'Title': '29:', 'Content': 'SC2.3物料发布\\n角色：DRE\\n\\n要点：\\n点击【创建ERO单据】按钮，触发ERO创建页面，填写相关信息；\\n搜索添加物料为更改请求项，界面上显示物料关联的技术规格、3D模型/2D图纸；\\n将物料关联的预发布状态的技术规格一并添加至DRO单据；\\n启动ERO流程，系统进行校验：\\n 更改请求项是否被添加到其他执行中的单据；\\n 是否子项状态大于等于父项；\\n5. 物料发布后，状态及相关属性同步至PDM；\\n6. 物料发布后，状态更新入湖；\\n7. 物料发布后，状态更新至12X；\\n8. 自研物料发布后，状态更新至21x和12x；\\n\\n\\n\\n\\n\\n'}, {'Title': '30:', 'Content': 'SC2.4物料发布\\n\\n创建ERO单据，添加预发布的数据进单据，并且把相关的预发布的子项添加进单据\\n\\n\\n\\n\\n'}, {'Title': '31:', 'Content': 'SC2.4.1物料发布审核\\n要点：\\n启动ERO流程，系统进行校验：\\n 更改请求项是否被添加到其他执行中的单据；\\n 是否子项状态大于等于父项；\\n\\n\\n\\n\\n\\n'}, {'Title': '32:', 'Content': 'SC2.4.2物料发布数据同步\\n要点：\\n1. 物料发布后，状态及相关属性同步至PDM；\\n2. 物料发布后，状态更新入湖；\\n3. 物料发布后，状态更新至12X；\\n4. 自研物料发布后，状态更新至21x和12x；\\n\\n\\n\\n\\n\\n'}, {'Title': '33:', 'Content': 'SC2.5物料变更\\n角色：机械DRE\\n\\n业务规则：\\n原辅料/工具物料/计划物料变更管理\\n物料无版本管理，对于预发布/发布的物料，需要通过MMO单据记录变更过程；\\n物料预改单只可更改分类属性和单位；\\n一个预改单可申请多个物料变更，一个物料可提多个属性变更；\\n判定通过后IMDM和SAP完成物料变更，同时告知PLM将marksup应用至物料，改后数据自动更新入湖；\\n判定不通过markup状态推至取消，物料属性维持现状；\\n\\n2. 自制件/虚拟物料创建、发布、变更\\n自研电气柜、风场组件包、备件清单等少量业务还存在手工搭建BOM清单（特殊类），其他的自制件/虚拟物料都是系统生成BOM清单；\\n特殊类自制件/虚拟物料根据业务场景不同可通过DRO、MCO进行发布；非特殊类均通过MCO进行发布；所有需要发布至SAP系统的均需通过MCO单据进行发布；\\n特殊类自制件/虚拟物料变更均通过标准修订功能进行变更；非特殊类通过系统自动修订变更；\\n\\n\\n\\n'}, {'Title': '34:', 'Content': 'SC2.5.1基于MMO单据的物料变更\\n角色：机械DRE\\n要点：\\n点击【创建MMO单据】按钮，触发MMO创建页面，填写相关信息；\\n基于MMO单据，在PLM中搜索添加原辅料/工具物料/计划物料，仅能添加预发布/发布的物料；\\n基于MMO单据的更改请求行物料创建Markup对象，弹出预改属性界面进行变更（且仅分类属性、测量单位、其他属性(历史数据)、工具物料的设备属性可变更）；\\n基于MMO单据的更改请求行填写变更描述；\\n可基于【我的单据】删除创建状态的MMO单据；\\n\\n\\n'}, {'Title': '35:', 'Content': 'SC2.5.2创建MMO单据\\n要点：\\n\\n\\n\\n\\n\\n主界面点击【操作】-【创建MMO】；\\n填写相关信息，标红字段为必填项，审签责任TBB/CBB可多选；\\n生成MMO单据。\\n\\n'}, {'Title': '36:', 'Content': 'SC2.5.3查看/删除MMO单据\\n要点：\\n在【我的单据】页面查看MMO单据；\\n勾选MMO单据，下拉可删除【预备】状态的MMO单据；\\n注：删除MMO单据的同时会一并删除其下物料所关联的Markup对象。\\n\\n\\n\\n\\n'}, {'Title': '37:', 'Content': 'SC2.5.4在MMO单据添加更改请求行\\n点击【添加现有项】，搜索添加欲修改的预发布或发布状态的原辅料或计划物料。\\n仅能添加【物料发放状态】为SAP的物料；\\n注：若物料已存在于状态为创建/审核中/发布的其他MMO，则无法被添加。\\n'}, {'Title': '38:', 'Content': 'SC2.5.5创建Markup对象\\n点击【全部编辑】可在【更改说明(MMO)】列添加说明；\\n在更改行的【物料预改】列点击【新建】，系统自动带出当前分类属性值；\\n编辑欲修改的分类属性值，标红字段为必填项；\\n点击完成后生成对象编号为“MK-” 加上7位流水号。\\n1\\n2\\n3\\n4\\n'}, {'Title': '39:', 'Content': 'SC2.5.6编辑Markup对象\\n\\n进入Markup对象，点击【编辑详细信息】按钮，可对Markup对象进行修改；\\n\\n\\n\\n\\n\\n'}, {'Title': '40:', 'Content': 'SC2.5.7删除Markup对象\\n在MMO【受影响的项】视图中勾选相应更改行后点击删除，移除更改行的同时把对应的Markup对象删除；\\n主界面右上角点击望远镜图标，弹出页面搜索Markup对象，勾选后点击删除按钮。\\n角色：机械DRE\\n'}, {'Title': '41:', 'Content': 'SC2.5.8查看Markup对象\\n\\n在物料的【更改管理】视图，找到物料相关的MMO单据，通过进入MMO单据，从而找到物料相关的Markup单据；\\n\\n\\n\\n\\n\\n'}, {'Title': '42:', 'Content': 'SC2.5.9MMO单据审签发布\\n要点：\\n启动审签发布流程，为审签流程设置活动参与者；\\n\\n'}, {'Title': '43:', 'Content': 'SC2.5.10返回IMDM修改信息\\n角色：机械DRE\\n要点：\\n审批结束，返回iMDM信息为允许变更，则系统应用该条Markup到物料上，且markup状态为已实施；\\n审批结束，返回iMDM信息为拒绝变更，则Markup状态切换为取消，该markup对应物料不做任何变更；\\n\\n'}, {'Title': '44:', 'Content': 'SC2.5.11物料变更在PLM自闭环\\n角色：机械DRE\\n要点：\\n若Markup的变更内容不涉及物料描述变更，则Markup在PLM中自闭环，不发送IMDM；\\n\\n'}, {'Title': '45:', 'Content': 'SC2.5.12MMO单据到达完成状态\\n要点：\\nMMO单据中所有更改执行项中的Markup状态变更，则将单据状态推至【完成】\\n\\n'}, {'Title': '46:', 'Content': 'SC2.5.13基于物料变更数据同步\\n\\n要点：\\n物料更新入湖\\n基于MMO流程的物料属性变更同步到PLM12、自研PLM、储能PLM、PDM；\\n\\n'}]\n"
     ]
    }
   ],
   "source": [
    "# 使用示例\n",
    "# ppt_path = \"path/to/your/ppt/file.pptx\"\n",
    "ppt_json = extract_ppt_info(powerpoint_file)\n",
    "print(ppt_json[:100])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Content for {'Title': '1:', 'Content': '21xPLM 基础课程\\n02 物料管理\\n'}:\n",
      "Content for {'Title': '2:', 'Content': 'SC2\\n物料管理\\n'}:\n",
      "Content for {'Title': '3:', 'Content': 'SC2.1 物料创建与发布\\n角色：机械DRE、电气DRE、工具工程师、集成计划\\n\\n业务规则：\\n原辅料/工具物料/计划物料创建与发布\\n风机业务的物料申请、发布、变更在新PLM21x中承载，在新PLM21x中生成Master物料数据；再自动将Instance影子物料同步至老PLM12x中；老PLM12x不能再触发物料创建；\\n自研大部件、储能等业务的物料申请、发布、变更在各自的业务PLM中承载，在新PLM21x中生成Master物料数据，自动同步Instance影子物料至对应的业务PLM中；\\n风机业务的物料统一在新PLM21x中通过DRO/ERO单据进行发布；同时，将状态同步至老PLM12x中Instance影子物料上；\\n自研大部件及储能等业务的物料在各自的业务PLM中基于影子物料通过DRO/ERO单据进行发布；同时，将状态同步至21x中Master物料数据上\\n2.物料应用于产品结构GoldenBOM\\n非TBB/CBB机型在老PLM12x中管理，直接使用12x中的Instance影子物料进行产品结构GoldenBOM的构建维护；\\nTBB/CBB机型在新PLM21x中管理，直接使用21x中的Master物料数据进行产品结构GoldenBOM的构建维护；\\n自研产品在自研PLM19x中管理，直接使用19x中的Instance影子物料进行产品结构GoldenBOM的构建维护；\\n\\n\\n\\n\\n'}:\n",
      "Content for {'Title': '4:', 'Content': 'SC2.1 物料创建与维护\\n角色：机械DRE、电气DRE、工具工程师、集成计划\\n\\n要点：\\n点击【我的视图】菜单，【创建零件】下拉触发原辅料创建页面；\\n选中零件系列，确认是否把类属信息(物料追溯方式、质量管控等级、供应商相关性等)继承下来；\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n'}:\n",
      "Content for {'Title': '5:', 'Content': 'SC2.1 物料创建与维护\\n角色：机械DRE、电气DRE、工具工程师、集成计划\\n\\n确认红色标注必填属性是否满足需求，并且若不填写，是否有报错提示；\\n物料中英文描述是否按需拼接，若描述超过40字符时，有对应提示；\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n'}:\n",
      "Content for {'Title': '6:', 'Content': 'SC2.1.1 物料创建数据同步\\n要点：\\n完成创建，同步影子物料至PLM12x系统；\\n物料主数据创建后，同步至PDM系统；\\n物料（主数据/影子）删除前，需同步删除各PLM系统中的主数据/影子物料;\\n物料（主数据/影子）删除前，需同步删除PDM系统中的主数据/影子物料;\\n物料创建即入湖；\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nPLM12X\\nPDM\\nPLM21x\\n\\nPLM21x\\nPLM12X\\nPDM\\n自研PLM\\n\\n\\n\\n创建物料\\n删除物料\\n'}:\n",
      "Content for {'Title': '7:', 'Content': 'SC2.1.1 物料变更数据同步\\n角色：DRE\\n\\n要点：\\nPLM21x物料状态、属性变更同步到PDM\\\\PLM12X；\\n自研PLM物料状态、属性变更同步到PLM21X（PLM12X）；\\n手工同步物料到自研PLM/PDM/PLM12x…；\\nPLM21x物料状态变更同步到PDM\\\\PLM12x\\\\自研PLM；\\n\\n\\n\\n\\n\\n\\n\\n'}:\n",
      "Content for {'Title': '8:', 'Content': 'SC2.1.2 创建原辅料/工具物料\\n\\n\\n角色：机械DRE、电气DRE、工具工程师\\n\\n要点：\\n工具物料与原辅料相比，创建页面多【设备属性】属性；\\n\\n工具物料创建界面\\n原辅料创建界面\\n'}:\n",
      "Content for {'Title': '9:', 'Content': 'SC2.1.3创建状态物料变更所有者\\n\\n\\n角色：机械DRE、电气DRE、工具工程师\\n\\n要点：\\n创建状态的物料可用过物料信息界面变更所有者按钮自行变更物料所有者；\\n\\n'}:\n",
      "Content for {'Title': '10:', 'Content': 'SC2.1.4 基于物料创建/关联技术规范\\n\\n\\n\\n要点：\\n在物料的【零件规范和文档页面】添加系统以及创建好的技术规范；\\n\\n'}:\n",
      "Content for {'Title': '11:', 'Content': 'SC2.1.5 基于物料创建/关联制造商供货件\\n\\n\\n要点：\\n制造商供货件是否需要创建，根据物料的供应商相关性判断：\\n强相关：发起物料审批流程时，一定要有制造商供货件；\\n弱相关：发起物料审批流程时，至少要有一个制造商供货件；\\n不相关：制造商供货件一栏内容为空，不能创建供货件；\\n2.制造商供货件号无要求，按需进行填写：厂商料号、物料描述;\\n3.可删除创建状态的制造商供货件；\\n\\n\\n\\n\\n'}:\n",
      "Content for {'Title': '12:', 'Content': 'SC2.1.6 基于物料关联参考文档\\n\\n\\n要点：\\n仅能关联预发布/发布状态参考文档\\n\\n\\n'}:\n",
      "Content for {'Title': '13:', 'Content': 'SC2.1.7基于物料创建/关联备件清单\\n\\n\\n要点：\\n在物料的【备件清单】页面新建备件清单，系统自动创建一个“SPL-物料号” 的备件清单；\\n可删除预备状态的备件清单；\\n\\n\\n\\n'}:\n",
      "Content for {'Title': '14:', 'Content': 'SC2.1.8维护备件清单\\n\\n\\n要点：\\n1、创建的备件清单SPL通过手工搜索添加/移除物料或者excel导入方式来维护BOM物料，点击导入备件清单，下载模型线下维护模板内容（红色必填），然后导入系统；\\n2、只能添加预发布或发布状态的物料\\n\\n\\n\\n'}:\n",
      "Content for {'Title': '15:', 'Content': 'SC2.1.9 创建自制件\\n角色：电气DRE\\n\\n要点：\\n1.维护自制件BOM清单，可手工添加也可以通过excel导入BOM清单方式（红色标注必填）；\\n2.可基于物料关联规格文档、参考文档及备件清单（同原辅料）；\\n\\n\\n'}:\n",
      "Content for {'Title': '16:', 'Content': 'SC2.2 物料预发布\\n角色：机械DRE、电气DRE、工具工程师\\n\\n要点：\\n点击【创建DRO单据】按钮，触发DRO创建页面，填写相关信息；\\n搜索添加物料为更改请求项，界面上显示物料关联的技术规格、3D模型/2D图纸；\\n将物料关联的预备状态的技术规格一并添加至DRO单据；\\n\\n\\n\\n\\n'}:\n",
      "Content for {'Title': '17:', 'Content': 'SC2.2 物料预发布\\n\\n要点：\\n点击【指派/提交】按钮，系统自动获取相关人员，可进行更换；\\n\\n\\n\\n\\n'}:\n",
      "Content for {'Title': '18:', 'Content': 'SC2.2.1 物料预发布审核\\n角色：机械DRE、电气DRE、工具工程师\\n\\n要点：\\n1. 启动DRO流程，系统进行校验：\\n 更改请求项是否被添加到其他执行中的单据；\\n 物料是否有关联TS、3D其中之一；\\n 符合相关性要求的物料是否关联制造商供货件；\\n 是否子项状态大于等于父项；\\n\\n\\n\\n'}:\n",
      "Content for {'Title': '19:', 'Content': 'SC2.2.1 物料预发布审核\\n\\n要点：\\n通过“指派提交”按钮为流程指派审核人员，通过“提升”按钮启动流程；\\n由任务owner去审批任务；\\n进入任务对象，可将流程任务转派给其他人审核；\\n\\n\\n\\n\\n\\n'}:\n",
      "Content for {'Title': '20:', 'Content': 'SC2.2.1.1 物料预发布审核终止\\n\\n\\n要点：\\n所有者发现发起DRO审核数据有误，撤回流程；\\n修改完数据继续发起审核流程；\\n\\n\\n\\n\\n\\n1\\n2\\n3\\n4\\n5\\n'}:\n",
      "Content for {'Title': '21:', 'Content': 'SC2.2.1.2 物料预发布审核驳回重新指派流程\\n\\n要点：\\n发起审核过的流程，如需更换流程，则需要重新指派流程模板，通过生命周期页面按钮更换；\\n换好流程模板之后，重新指派人员，通过此操作换人员审批；\\n\\n\\n\\n\\n\\n1\\n2\\n3\\n4\\n'}:\n",
      "Content for {'Title': '22:', 'Content': 'SC2.2.2 物料预发布数据同步\\n角色：DRE\\n\\n要点：\\n1. 物料预发布后，状态及相关属性同步至PDM\\n2. 物料切入预发布状态触发物料发送至IMDM系统，并返回状态至PLM系统，当物料在IMDM走完流程至SAP时，返回状态至PLM系统；\\n\\n\\n\\n\\n'}:\n",
      "Content for {'Title': '23:', 'Content': 'SC2.2.3 物料预发布/发布后关联制造商供货件\\n角色：DRE\\n\\n要点：\\n物料预发布/发布后DRE有创建制造商供货件的权限；\\n创建时仍然校验物料的制造商相关性，仅为弱相关时才可以继续添加制造商供货件；\\n\\n\\n\\n\\n'}:\n",
      "Content for {'Title': '24:', 'Content': 'SC2.2.4 物料预发布数据同步\\n要点：\\n1.物料上增加【发送物料至IMDM】按钮，当物料没有正常触发至IMDM时，供管理员干预；\\n2. 物料上增加【发送物料至自研PLM】按钮，供自研PLM借用风机现有物料；\\n3. 物料预发布后，状态更新入湖；\\n'}:\n",
      "Content for {'Title': '25:', 'Content': 'SC2.3 创建计划物料\\n角色：区域计划\\n\\n要点：\\n1.计划物料创建页面填写且显示的的分类属性为分类库中标记分类属性为计划物料的分类属性；\\n2.可基于物料关联参考文档及备件清单；\\n\\n\\n\\n\\n'}:\n",
      "Content for {'Title': '26:', 'Content': 'SC2.3.1 计划物料发布\\n角色：区域计划\\n\\n要点：\\n1.创建EO单据，更改类别选择“计划物料发布”，添加现有项把计划物料添加至EO单据；\\n2.启动审核流程，确认是“计划物料发布流程模板” 将计划物料推至“发布”状态；\\n\\n\\n\\n\\n\\n'}:\n",
      "Content for {'Title': '27:', 'Content': 'SC2.3.2 备件清单发布/变更\\n角色：机械DRE、电气DRE、工具工程师\\n\\n要点：\\n1.创建EO单据，发布备件更改类别选择“Golden备件发布”，变更备件更改类别选择“Golden备件变更”，添加现有项把备件清单添加至EO单据；\\n2.启动审核流程，确认是“SPL Release Route” 将备件清单推至“发布”状态；\\n\\n\\n\\n'}:\n",
      "Content for {'Title': '28:', 'Content': 'SC2.3.3 标准件库变更\\n角色：机械DRE、电气DRE\\n要点：\\n1.创建EO单据，更改类别选择“标准件库”，填写其他信息后点击完成；\\n2.点击单据【规划完成发送PDM】按钮，将单据发送PDM，并执行标准件库变更，单据在PDM发布之后，将审签信息及其状态同步至PLM；\\n\\n\\n\\n'}:\n",
      "Content for {'Title': '29:', 'Content': 'SC2.3物料发布\\n角色：DRE\\n\\n要点：\\n点击【创建ERO单据】按钮，触发ERO创建页面，填写相关信息；\\n搜索添加物料为更改请求项，界面上显示物料关联的技术规格、3D模型/2D图纸；\\n将物料关联的预发布状态的技术规格一并添加至DRO单据；\\n启动ERO流程，系统进行校验：\\n 更改请求项是否被添加到其他执行中的单据；\\n 是否子项状态大于等于父项；\\n5. 物料发布后，状态及相关属性同步至PDM；\\n6. 物料发布后，状态更新入湖；\\n7. 物料发布后，状态更新至12X；\\n8. 自研物料发布后，状态更新至21x和12x；\\n\\n\\n\\n\\n\\n'}:\n",
      "Content for {'Title': '30:', 'Content': 'SC2.4物料发布\\n\\n创建ERO单据，添加预发布的数据进单据，并且把相关的预发布的子项添加进单据\\n\\n\\n\\n\\n'}:\n",
      "Content for {'Title': '31:', 'Content': 'SC2.4.1物料发布审核\\n要点：\\n启动ERO流程，系统进行校验：\\n 更改请求项是否被添加到其他执行中的单据；\\n 是否子项状态大于等于父项；\\n\\n\\n\\n\\n\\n'}:\n",
      "Content for {'Title': '32:', 'Content': 'SC2.4.2物料发布数据同步\\n要点：\\n1. 物料发布后，状态及相关属性同步至PDM；\\n2. 物料发布后，状态更新入湖；\\n3. 物料发布后，状态更新至12X；\\n4. 自研物料发布后，状态更新至21x和12x；\\n\\n\\n\\n\\n\\n'}:\n",
      "Content for {'Title': '33:', 'Content': 'SC2.5物料变更\\n角色：机械DRE\\n\\n业务规则：\\n原辅料/工具物料/计划物料变更管理\\n物料无版本管理，对于预发布/发布的物料，需要通过MMO单据记录变更过程；\\n物料预改单只可更改分类属性和单位；\\n一个预改单可申请多个物料变更，一个物料可提多个属性变更；\\n判定通过后IMDM和SAP完成物料变更，同时告知PLM将marksup应用至物料，改后数据自动更新入湖；\\n判定不通过markup状态推至取消，物料属性维持现状；\\n\\n2. 自制件/虚拟物料创建、发布、变更\\n自研电气柜、风场组件包、备件清单等少量业务还存在手工搭建BOM清单（特殊类），其他的自制件/虚拟物料都是系统生成BOM清单；\\n特殊类自制件/虚拟物料根据业务场景不同可通过DRO、MCO进行发布；非特殊类均通过MCO进行发布；所有需要发布至SAP系统的均需通过MCO单据进行发布；\\n特殊类自制件/虚拟物料变更均通过标准修订功能进行变更；非特殊类通过系统自动修订变更；\\n\\n\\n\\n'}:\n",
      "Content for {'Title': '34:', 'Content': 'SC2.5.1基于MMO单据的物料变更\\n角色：机械DRE\\n要点：\\n点击【创建MMO单据】按钮，触发MMO创建页面，填写相关信息；\\n基于MMO单据，在PLM中搜索添加原辅料/工具物料/计划物料，仅能添加预发布/发布的物料；\\n基于MMO单据的更改请求行物料创建Markup对象，弹出预改属性界面进行变更（且仅分类属性、测量单位、其他属性(历史数据)、工具物料的设备属性可变更）；\\n基于MMO单据的更改请求行填写变更描述；\\n可基于【我的单据】删除创建状态的MMO单据；\\n\\n\\n'}:\n",
      "Content for {'Title': '35:', 'Content': 'SC2.5.2创建MMO单据\\n要点：\\n\\n\\n\\n\\n\\n主界面点击【操作】-【创建MMO】；\\n填写相关信息，标红字段为必填项，审签责任TBB/CBB可多选；\\n生成MMO单据。\\n\\n'}:\n",
      "Content for {'Title': '36:', 'Content': 'SC2.5.3查看/删除MMO单据\\n要点：\\n在【我的单据】页面查看MMO单据；\\n勾选MMO单据，下拉可删除【预备】状态的MMO单据；\\n注：删除MMO单据的同时会一并删除其下物料所关联的Markup对象。\\n\\n\\n\\n\\n'}:\n",
      "Content for {'Title': '37:', 'Content': 'SC2.5.4在MMO单据添加更改请求行\\n点击【添加现有项】，搜索添加欲修改的预发布或发布状态的原辅料或计划物料。\\n仅能添加【物料发放状态】为SAP的物料；\\n注：若物料已存在于状态为创建/审核中/发布的其他MMO，则无法被添加。\\n'}:\n",
      "Content for {'Title': '38:', 'Content': 'SC2.5.5创建Markup对象\\n点击【全部编辑】可在【更改说明(MMO)】列添加说明；\\n在更改行的【物料预改】列点击【新建】，系统自动带出当前分类属性值；\\n编辑欲修改的分类属性值，标红字段为必填项；\\n点击完成后生成对象编号为“MK-” 加上7位流水号。\\n1\\n2\\n3\\n4\\n'}:\n",
      "Content for {'Title': '39:', 'Content': 'SC2.5.6编辑Markup对象\\n\\n进入Markup对象，点击【编辑详细信息】按钮，可对Markup对象进行修改；\\n\\n\\n\\n\\n\\n'}:\n",
      "Content for {'Title': '40:', 'Content': 'SC2.5.7删除Markup对象\\n在MMO【受影响的项】视图中勾选相应更改行后点击删除，移除更改行的同时把对应的Markup对象删除；\\n主界面右上角点击望远镜图标，弹出页面搜索Markup对象，勾选后点击删除按钮。\\n角色：机械DRE\\n'}:\n",
      "Content for {'Title': '41:', 'Content': 'SC2.5.8查看Markup对象\\n\\n在物料的【更改管理】视图，找到物料相关的MMO单据，通过进入MMO单据，从而找到物料相关的Markup单据；\\n\\n\\n\\n\\n\\n'}:\n",
      "Content for {'Title': '42:', 'Content': 'SC2.5.9MMO单据审签发布\\n要点：\\n启动审签发布流程，为审签流程设置活动参与者；\\n\\n'}:\n",
      "Content for {'Title': '43:', 'Content': 'SC2.5.10返回IMDM修改信息\\n角色：机械DRE\\n要点：\\n审批结束，返回iMDM信息为允许变更，则系统应用该条Markup到物料上，且markup状态为已实施；\\n审批结束，返回iMDM信息为拒绝变更，则Markup状态切换为取消，该markup对应物料不做任何变更；\\n\\n'}:\n",
      "Content for {'Title': '44:', 'Content': 'SC2.5.11物料变更在PLM自闭环\\n角色：机械DRE\\n要点：\\n若Markup的变更内容不涉及物料描述变更，则Markup在PLM中自闭环，不发送IMDM；\\n\\n'}:\n",
      "Content for {'Title': '45:', 'Content': 'SC2.5.12MMO单据到达完成状态\\n要点：\\nMMO单据中所有更改执行项中的Markup状态变更，则将单据状态推至【完成】\\n\\n'}:\n",
      "Content for {'Title': '46:', 'Content': 'SC2.5.13基于物料变更数据同步\\n\\n要点：\\n物料更新入湖\\n基于MMO流程的物料属性变更同步到PLM12、自研PLM、储能PLM、PDM；\\n\\n'}:\n"
     ]
    }
   ],
   "source": [
    "ppt_content = extract_ppt_info(powerpoint_file)\n",
    "\n",
    "for item in ppt_content:\n",
    "    # content = item['Content']\n",
    "    print(f\"Content for {item}:\")\n",
    "    # print(content)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 嵌入"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'PLM21x_CH4_02_CH4'"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# results = mq.index(new).delete()\n",
    "new_filename\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "将其嵌入到Marqo系统中"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Adding {'Title': '1:', 'Content': '21xPLM 基础课程\\n02 物料管理\\n'} to the index\n",
      "Adding {'Title': '2:', 'Content': 'SC2\\n物料管理\\n'} to the index\n",
      "Adding {'Title': '3:', 'Content': 'SC2.1 物料创建与发布\\n角色：机械DRE、电气DRE、工具工程师、集成计划\\n\\n业务规则：\\n原辅料/工具物料/计划物料创建与发布\\n风机业务的物料申请、发布、变更在新PLM21x中承载，在新PLM21x中生成Master物料数据；再自动将Instance影子物料同步至老PLM12x中；老PLM12x不能再触发物料创建；\\n自研大部件、储能等业务的物料申请、发布、变更在各自的业务PLM中承载，在新PLM21x中生成Master物料数据，自动同步Instance影子物料至对应的业务PLM中；\\n风机业务的物料统一在新PLM21x中通过DRO/ERO单据进行发布；同时，将状态同步至老PLM12x中Instance影子物料上；\\n自研大部件及储能等业务的物料在各自的业务PLM中基于影子物料通过DRO/ERO单据进行发布；同时，将状态同步至21x中Master物料数据上\\n2.物料应用于产品结构GoldenBOM\\n非TBB/CBB机型在老PLM12x中管理，直接使用12x中的Instance影子物料进行产品结构GoldenBOM的构建维护；\\nTBB/CBB机型在新PLM21x中管理，直接使用21x中的Master物料数据进行产品结构GoldenBOM的构建维护；\\n自研产品在自研PLM19x中管理，直接使用19x中的Instance影子物料进行产品结构GoldenBOM的构建维护；\\n\\n\\n\\n\\n'} to the index\n",
      "Adding {'Title': '4:', 'Content': 'SC2.1 物料创建与维护\\n角色：机械DRE、电气DRE、工具工程师、集成计划\\n\\n要点：\\n点击【我的视图】菜单，【创建零件】下拉触发原辅料创建页面；\\n选中零件系列，确认是否把类属信息(物料追溯方式、质量管控等级、供应商相关性等)继承下来；\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n'} to the index\n",
      "Adding {'Title': '5:', 'Content': 'SC2.1 物料创建与维护\\n角色：机械DRE、电气DRE、工具工程师、集成计划\\n\\n确认红色标注必填属性是否满足需求，并且若不填写，是否有报错提示；\\n物料中英文描述是否按需拼接，若描述超过40字符时，有对应提示；\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n'} to the index\n",
      "Adding {'Title': '6:', 'Content': 'SC2.1.1 物料创建数据同步\\n要点：\\n完成创建，同步影子物料至PLM12x系统；\\n物料主数据创建后，同步至PDM系统；\\n物料（主数据/影子）删除前，需同步删除各PLM系统中的主数据/影子物料;\\n物料（主数据/影子）删除前，需同步删除PDM系统中的主数据/影子物料;\\n物料创建即入湖；\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nPLM12X\\nPDM\\nPLM21x\\n\\nPLM21x\\nPLM12X\\nPDM\\n自研PLM\\n\\n\\n\\n创建物料\\n删除物料\\n'} to the index\n",
      "Adding {'Title': '7:', 'Content': 'SC2.1.1 物料变更数据同步\\n角色：DRE\\n\\n要点：\\nPLM21x物料状态、属性变更同步到PDM\\\\PLM12X；\\n自研PLM物料状态、属性变更同步到PLM21X（PLM12X）；\\n手工同步物料到自研PLM/PDM/PLM12x…；\\nPLM21x物料状态变更同步到PDM\\\\PLM12x\\\\自研PLM；\\n\\n\\n\\n\\n\\n\\n\\n'} to the index\n",
      "Adding {'Title': '8:', 'Content': 'SC2.1.2 创建原辅料/工具物料\\n\\n\\n角色：机械DRE、电气DRE、工具工程师\\n\\n要点：\\n工具物料与原辅料相比，创建页面多【设备属性】属性；\\n\\n工具物料创建界面\\n原辅料创建界面\\n'} to the index\n",
      "Adding {'Title': '9:', 'Content': 'SC2.1.3创建状态物料变更所有者\\n\\n\\n角色：机械DRE、电气DRE、工具工程师\\n\\n要点：\\n创建状态的物料可用过物料信息界面变更所有者按钮自行变更物料所有者；\\n\\n'} to the index\n",
      "Adding {'Title': '10:', 'Content': 'SC2.1.4 基于物料创建/关联技术规范\\n\\n\\n\\n要点：\\n在物料的【零件规范和文档页面】添加系统以及创建好的技术规范；\\n\\n'} to the index\n",
      "Adding {'Title': '11:', 'Content': 'SC2.1.5 基于物料创建/关联制造商供货件\\n\\n\\n要点：\\n制造商供货件是否需要创建，根据物料的供应商相关性判断：\\n强相关：发起物料审批流程时，一定要有制造商供货件；\\n弱相关：发起物料审批流程时，至少要有一个制造商供货件；\\n不相关：制造商供货件一栏内容为空，不能创建供货件；\\n2.制造商供货件号无要求，按需进行填写：厂商料号、物料描述;\\n3.可删除创建状态的制造商供货件；\\n\\n\\n\\n\\n'} to the index\n",
      "Adding {'Title': '12:', 'Content': 'SC2.1.6 基于物料关联参考文档\\n\\n\\n要点：\\n仅能关联预发布/发布状态参考文档\\n\\n\\n'} to the index\n",
      "Adding {'Title': '13:', 'Content': 'SC2.1.7基于物料创建/关联备件清单\\n\\n\\n要点：\\n在物料的【备件清单】页面新建备件清单，系统自动创建一个“SPL-物料号” 的备件清单；\\n可删除预备状态的备件清单；\\n\\n\\n\\n'} to the index\n",
      "Adding {'Title': '14:', 'Content': 'SC2.1.8维护备件清单\\n\\n\\n要点：\\n1、创建的备件清单SPL通过手工搜索添加/移除物料或者excel导入方式来维护BOM物料，点击导入备件清单，下载模型线下维护模板内容（红色必填），然后导入系统；\\n2、只能添加预发布或发布状态的物料\\n\\n\\n\\n'} to the index\n",
      "Adding {'Title': '15:', 'Content': 'SC2.1.9 创建自制件\\n角色：电气DRE\\n\\n要点：\\n1.维护自制件BOM清单，可手工添加也可以通过excel导入BOM清单方式（红色标注必填）；\\n2.可基于物料关联规格文档、参考文档及备件清单（同原辅料）；\\n\\n\\n'} to the index\n",
      "Adding {'Title': '16:', 'Content': 'SC2.2 物料预发布\\n角色：机械DRE、电气DRE、工具工程师\\n\\n要点：\\n点击【创建DRO单据】按钮，触发DRO创建页面，填写相关信息；\\n搜索添加物料为更改请求项，界面上显示物料关联的技术规格、3D模型/2D图纸；\\n将物料关联的预备状态的技术规格一并添加至DRO单据；\\n\\n\\n\\n\\n'} to the index\n",
      "Adding {'Title': '17:', 'Content': 'SC2.2 物料预发布\\n\\n要点：\\n点击【指派/提交】按钮，系统自动获取相关人员，可进行更换；\\n\\n\\n\\n\\n'} to the index\n",
      "Adding {'Title': '18:', 'Content': 'SC2.2.1 物料预发布审核\\n角色：机械DRE、电气DRE、工具工程师\\n\\n要点：\\n1. 启动DRO流程，系统进行校验：\\n 更改请求项是否被添加到其他执行中的单据；\\n 物料是否有关联TS、3D其中之一；\\n 符合相关性要求的物料是否关联制造商供货件；\\n 是否子项状态大于等于父项；\\n\\n\\n\\n'} to the index\n",
      "Adding {'Title': '19:', 'Content': 'SC2.2.1 物料预发布审核\\n\\n要点：\\n通过“指派提交”按钮为流程指派审核人员，通过“提升”按钮启动流程；\\n由任务owner去审批任务；\\n进入任务对象，可将流程任务转派给其他人审核；\\n\\n\\n\\n\\n\\n'} to the index\n",
      "Adding {'Title': '20:', 'Content': 'SC2.2.1.1 物料预发布审核终止\\n\\n\\n要点：\\n所有者发现发起DRO审核数据有误，撤回流程；\\n修改完数据继续发起审核流程；\\n\\n\\n\\n\\n\\n1\\n2\\n3\\n4\\n5\\n'} to the index\n",
      "Adding {'Title': '21:', 'Content': 'SC2.2.1.2 物料预发布审核驳回重新指派流程\\n\\n要点：\\n发起审核过的流程，如需更换流程，则需要重新指派流程模板，通过生命周期页面按钮更换；\\n换好流程模板之后，重新指派人员，通过此操作换人员审批；\\n\\n\\n\\n\\n\\n1\\n2\\n3\\n4\\n'} to the index\n",
      "Adding {'Title': '22:', 'Content': 'SC2.2.2 物料预发布数据同步\\n角色：DRE\\n\\n要点：\\n1. 物料预发布后，状态及相关属性同步至PDM\\n2. 物料切入预发布状态触发物料发送至IMDM系统，并返回状态至PLM系统，当物料在IMDM走完流程至SAP时，返回状态至PLM系统；\\n\\n\\n\\n\\n'} to the index\n",
      "Adding {'Title': '23:', 'Content': 'SC2.2.3 物料预发布/发布后关联制造商供货件\\n角色：DRE\\n\\n要点：\\n物料预发布/发布后DRE有创建制造商供货件的权限；\\n创建时仍然校验物料的制造商相关性，仅为弱相关时才可以继续添加制造商供货件；\\n\\n\\n\\n\\n'} to the index\n",
      "Adding {'Title': '24:', 'Content': 'SC2.2.4 物料预发布数据同步\\n要点：\\n1.物料上增加【发送物料至IMDM】按钮，当物料没有正常触发至IMDM时，供管理员干预；\\n2. 物料上增加【发送物料至自研PLM】按钮，供自研PLM借用风机现有物料；\\n3. 物料预发布后，状态更新入湖；\\n'} to the index\n",
      "Adding {'Title': '25:', 'Content': 'SC2.3 创建计划物料\\n角色：区域计划\\n\\n要点：\\n1.计划物料创建页面填写且显示的的分类属性为分类库中标记分类属性为计划物料的分类属性；\\n2.可基于物料关联参考文档及备件清单；\\n\\n\\n\\n\\n'} to the index\n",
      "Adding {'Title': '26:', 'Content': 'SC2.3.1 计划物料发布\\n角色：区域计划\\n\\n要点：\\n1.创建EO单据，更改类别选择“计划物料发布”，添加现有项把计划物料添加至EO单据；\\n2.启动审核流程，确认是“计划物料发布流程模板” 将计划物料推至“发布”状态；\\n\\n\\n\\n\\n\\n'} to the index\n",
      "Adding {'Title': '27:', 'Content': 'SC2.3.2 备件清单发布/变更\\n角色：机械DRE、电气DRE、工具工程师\\n\\n要点：\\n1.创建EO单据，发布备件更改类别选择“Golden备件发布”，变更备件更改类别选择“Golden备件变更”，添加现有项把备件清单添加至EO单据；\\n2.启动审核流程，确认是“SPL Release Route” 将备件清单推至“发布”状态；\\n\\n\\n\\n'} to the index\n",
      "Adding {'Title': '28:', 'Content': 'SC2.3.3 标准件库变更\\n角色：机械DRE、电气DRE\\n要点：\\n1.创建EO单据，更改类别选择“标准件库”，填写其他信息后点击完成；\\n2.点击单据【规划完成发送PDM】按钮，将单据发送PDM，并执行标准件库变更，单据在PDM发布之后，将审签信息及其状态同步至PLM；\\n\\n\\n\\n'} to the index\n",
      "Adding {'Title': '29:', 'Content': 'SC2.3物料发布\\n角色：DRE\\n\\n要点：\\n点击【创建ERO单据】按钮，触发ERO创建页面，填写相关信息；\\n搜索添加物料为更改请求项，界面上显示物料关联的技术规格、3D模型/2D图纸；\\n将物料关联的预发布状态的技术规格一并添加至DRO单据；\\n启动ERO流程，系统进行校验：\\n 更改请求项是否被添加到其他执行中的单据；\\n 是否子项状态大于等于父项；\\n5. 物料发布后，状态及相关属性同步至PDM；\\n6. 物料发布后，状态更新入湖；\\n7. 物料发布后，状态更新至12X；\\n8. 自研物料发布后，状态更新至21x和12x；\\n\\n\\n\\n\\n\\n'} to the index\n",
      "Adding {'Title': '30:', 'Content': 'SC2.4物料发布\\n\\n创建ERO单据，添加预发布的数据进单据，并且把相关的预发布的子项添加进单据\\n\\n\\n\\n\\n'} to the index\n",
      "Adding {'Title': '31:', 'Content': 'SC2.4.1物料发布审核\\n要点：\\n启动ERO流程，系统进行校验：\\n 更改请求项是否被添加到其他执行中的单据；\\n 是否子项状态大于等于父项；\\n\\n\\n\\n\\n\\n'} to the index\n",
      "Adding {'Title': '32:', 'Content': 'SC2.4.2物料发布数据同步\\n要点：\\n1. 物料发布后，状态及相关属性同步至PDM；\\n2. 物料发布后，状态更新入湖；\\n3. 物料发布后，状态更新至12X；\\n4. 自研物料发布后，状态更新至21x和12x；\\n\\n\\n\\n\\n\\n'} to the index\n",
      "Adding {'Title': '33:', 'Content': 'SC2.5物料变更\\n角色：机械DRE\\n\\n业务规则：\\n原辅料/工具物料/计划物料变更管理\\n物料无版本管理，对于预发布/发布的物料，需要通过MMO单据记录变更过程；\\n物料预改单只可更改分类属性和单位；\\n一个预改单可申请多个物料变更，一个物料可提多个属性变更；\\n判定通过后IMDM和SAP完成物料变更，同时告知PLM将marksup应用至物料，改后数据自动更新入湖；\\n判定不通过markup状态推至取消，物料属性维持现状；\\n\\n2. 自制件/虚拟物料创建、发布、变更\\n自研电气柜、风场组件包、备件清单等少量业务还存在手工搭建BOM清单（特殊类），其他的自制件/虚拟物料都是系统生成BOM清单；\\n特殊类自制件/虚拟物料根据业务场景不同可通过DRO、MCO进行发布；非特殊类均通过MCO进行发布；所有需要发布至SAP系统的均需通过MCO单据进行发布；\\n特殊类自制件/虚拟物料变更均通过标准修订功能进行变更；非特殊类通过系统自动修订变更；\\n\\n\\n\\n'} to the index\n",
      "Adding {'Title': '34:', 'Content': 'SC2.5.1基于MMO单据的物料变更\\n角色：机械DRE\\n要点：\\n点击【创建MMO单据】按钮，触发MMO创建页面，填写相关信息；\\n基于MMO单据，在PLM中搜索添加原辅料/工具物料/计划物料，仅能添加预发布/发布的物料；\\n基于MMO单据的更改请求行物料创建Markup对象，弹出预改属性界面进行变更（且仅分类属性、测量单位、其他属性(历史数据)、工具物料的设备属性可变更）；\\n基于MMO单据的更改请求行填写变更描述；\\n可基于【我的单据】删除创建状态的MMO单据；\\n\\n\\n'} to the index\n",
      "Adding {'Title': '35:', 'Content': 'SC2.5.2创建MMO单据\\n要点：\\n\\n\\n\\n\\n\\n主界面点击【操作】-【创建MMO】；\\n填写相关信息，标红字段为必填项，审签责任TBB/CBB可多选；\\n生成MMO单据。\\n\\n'} to the index\n",
      "Adding {'Title': '36:', 'Content': 'SC2.5.3查看/删除MMO单据\\n要点：\\n在【我的单据】页面查看MMO单据；\\n勾选MMO单据，下拉可删除【预备】状态的MMO单据；\\n注：删除MMO单据的同时会一并删除其下物料所关联的Markup对象。\\n\\n\\n\\n\\n'} to the index\n",
      "Adding {'Title': '37:', 'Content': 'SC2.5.4在MMO单据添加更改请求行\\n点击【添加现有项】，搜索添加欲修改的预发布或发布状态的原辅料或计划物料。\\n仅能添加【物料发放状态】为SAP的物料；\\n注：若物料已存在于状态为创建/审核中/发布的其他MMO，则无法被添加。\\n'} to the index\n",
      "Adding {'Title': '38:', 'Content': 'SC2.5.5创建Markup对象\\n点击【全部编辑】可在【更改说明(MMO)】列添加说明；\\n在更改行的【物料预改】列点击【新建】，系统自动带出当前分类属性值；\\n编辑欲修改的分类属性值，标红字段为必填项；\\n点击完成后生成对象编号为“MK-” 加上7位流水号。\\n1\\n2\\n3\\n4\\n'} to the index\n",
      "Adding {'Title': '39:', 'Content': 'SC2.5.6编辑Markup对象\\n\\n进入Markup对象，点击【编辑详细信息】按钮，可对Markup对象进行修改；\\n\\n\\n\\n\\n\\n'} to the index\n",
      "Adding {'Title': '40:', 'Content': 'SC2.5.7删除Markup对象\\n在MMO【受影响的项】视图中勾选相应更改行后点击删除，移除更改行的同时把对应的Markup对象删除；\\n主界面右上角点击望远镜图标，弹出页面搜索Markup对象，勾选后点击删除按钮。\\n角色：机械DRE\\n'} to the index\n",
      "Adding {'Title': '41:', 'Content': 'SC2.5.8查看Markup对象\\n\\n在物料的【更改管理】视图，找到物料相关的MMO单据，通过进入MMO单据，从而找到物料相关的Markup单据；\\n\\n\\n\\n\\n\\n'} to the index\n",
      "Adding {'Title': '42:', 'Content': 'SC2.5.9MMO单据审签发布\\n要点：\\n启动审签发布流程，为审签流程设置活动参与者；\\n\\n'} to the index\n",
      "Adding {'Title': '43:', 'Content': 'SC2.5.10返回IMDM修改信息\\n角色：机械DRE\\n要点：\\n审批结束，返回iMDM信息为允许变更，则系统应用该条Markup到物料上，且markup状态为已实施；\\n审批结束，返回iMDM信息为拒绝变更，则Markup状态切换为取消，该markup对应物料不做任何变更；\\n\\n'} to the index\n",
      "Adding {'Title': '44:', 'Content': 'SC2.5.11物料变更在PLM自闭环\\n角色：机械DRE\\n要点：\\n若Markup的变更内容不涉及物料描述变更，则Markup在PLM中自闭环，不发送IMDM；\\n\\n'} to the index\n",
      "Adding {'Title': '45:', 'Content': 'SC2.5.12MMO单据到达完成状态\\n要点：\\nMMO单据中所有更改执行项中的Markup状态变更，则将单据状态推至【完成】\\n\\n'} to the index\n",
      "Adding {'Title': '46:', 'Content': 'SC2.5.13基于物料变更数据同步\\n\\n要点：\\n物料更新入湖\\n基于MMO流程的物料属性变更同步到PLM12、自研PLM、储能PLM、PDM；\\n\\n'} to the index\n"
     ]
    }
   ],
   "source": [
    "import marqo\n",
    "\n",
    "mq = marqo.Client(url=\"http://localhost:8882\")\n",
    "\n",
    "mq.create_index(new_filename, model=\"hf/e5-base-v2\")\n",
    "\n",
    "for item in ppt_content:\n",
    "    # item['Content'] = np.array(item['Content'])  # 确保 Content 是 NumPy 数组\n",
    "    print(f\"Adding {item} to the index\")\n",
    "    mq.index(new_filename).add_documents(\n",
    "        [\n",
    "            {\n",
    "                \"Title\": item['Title'],\n",
    "                \"Content\": item['Content'],\n",
    "            }\n",
    "        ],\n",
    "        tensor_fields=[\"Content\"],\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [],
   "source": [
    "results = mq.index(new_filename).search(\n",
    "    q=\"返回IMDM修改信息?\"\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('SC2.2.4 物料预发布数据同步\\n'\n",
      " '要点：\\n'\n",
      " '1.物料上增加【发送物料至IMDM】按钮，当物料没有正常触发至IMDM时，供管理员干预；\\n'\n",
      " '2. 物料上增加【发送物料至自研PLM】按钮，供自研PLM借用风机现有物料；\\n'\n",
      " '3. 物料预发布后，状态更新入湖；\\n')\n"
     ]
    }
   ],
   "source": [
    "import pprint\n",
    "pprint.pprint(results['hits'][2]['Content'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**问题**：\n",
    "目前搜索结果没有Rerank，导致第一次hit命中率不能100%"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
